﻿procedure;
var
  dcit_SL   : TStringList;
  dcit_Prot : TStringList;
  dcit_DDS1 : TAppDataSet;
  dcit_DDS2 : TAppDataSet;
  dcit_MPar : TAppDataSet;
  dcit_Obd  : string;
  dcit_Dat  : DateTime;
  dcit_Par  : string;
  dcit_Oso  : string;
  dcit_Meno : string;
  dcit_Poi  : string;
  dcit_PPV  : string;
  dcit_Kon  : boolean;



  //01 DCIT procedure - start
  procedure dcit_Protokol(ID,Predmet,Text:string);
    var
    dcit_Protokol: TAppDataSet;
  begin
    dcit_Protokol := TAppDataSet.Create;
    try
      // DR Protokoly akci
      dcit_Protokol.SetDSParams(SourceName, rmPrimary, '2396461,10', dsaFullNonVisible, '', '', '', '', '');
      dcit_Protokol.OpenEmpty;
      dcit_Protokol.Append;
      dcit_Protokol.FieldByName('ic_a').AsString := LByID(ID);
      dcit_Protokol.FieldByName('u_a').AsString := RByID(ID);
      // datum a cas zapisu protokolu
      dcit_Protokol.FieldByName('2396465,10').AsDateTime := SysDateTime;  
      // uzivatel
      dcit_Protokol.FieldByName('2396470,10').AsString := 'Reinstall 109.2';
      // predmet
      dcit_Protokol.FieldByName('2396483,10').AsString := Predmet;
      // protokol akce
      dcit_Protokol.FieldByName('2396466,10').AsString := Text;
      dcit_Protokol.Post;
    finally
      dcit_Protokol.Free;
    end;
  end;


  procedure OpravaDDSPoistovne(ID,Aktivna,Kod,Typ,Nazov,DopNaz,web,ICO: string);
  begin // od ver. 109.2 len poistovne
    try
      // obchodny partner (organizacia)
      if not AppServer.ExistDBKeyValue(SourceName,rmPrimary,'156,0',ID) then
      begin
        dcit_SL.Clear;
        dcit_SL.Values['ic']         := LByID(ID);
        dcit_SL.Values['u']          := RByID(ID);
        dcit_SL.Values['18734,10']   := Nazov;
        dcit_SL.Values['1490702,10'] := DopNaz;
        dcit_SL.Values['235,1']      := web;
        dcit_SL.Values['8224,10']    := ICO;
        dcit_SL.Values['1123125,10'] := '740878,10';
        AppServer.InsertDBRecord(SourceName,MainLang,'156,0',False,dcit_SL);
      end else
      begin
        dcit_SL.Clear;
        {
        AppServer.ReadDBRecord(Sourcename,rmPrimary,'156,0',ID,True,dcit_SL);
        if dcit_SL.Values['18734,10'] <> Nazov then dcit_SL.Values['18734,10'] := Nazov;
        if dcit_SL.Values['1490702,10'] = '' then dcit_SL.Values['1490702,10'] := DopNaz;
        if dcit_SL.Values['235,1']      = '' then dcit_SL.Values['235,1']      := web;
        if dcit_SL.Values['8224,10']    = '' then dcit_SL.Values['8224,10']    := ICO;
        if dcit_SL.Values['1123125,10'] = '' then dcit_SL.Values['1123125,10'] := '740878,10';
        }
        dcit_SL.Values['18734,10']   := Nazov;
        dcit_SL.Values['1490702,10'] := DopNaz;
        dcit_SL.Values['235,1']      := web;
        dcit_SL.Values['8224,10']    := ICO;
        dcit_SL.Values['1123125,10'] := '740878,10';
        AppServer.UpdateDBRecord(SourceName,MainLang,'156,0',ID,dcit_SL);
      end;
      // uctovatelne polozky
      if not AppServer.ExistDBKeyValue(SourceName,rmPrimary,'588385,10',ID) then
      begin
        dcit_SL.Clear;
        dcit_SL.Values['ic']         := LByID(ID);
        dcit_SL.Values['u']          := RByID(ID);
        dcit_SL.Values['1004356,10'] := '740878,10';
        dcit_SL.Values['607153,10']  := SubString(Kod,1,6);
        dcit_SL.Values['607151,10']  := Substring(Nazov,1,57);
        AppServer.InsertDBRecord(SourceName,MainLang,'588385,10',True,dcit_SL);
      end;
      // uctovatelne polozky - mzdy
      if not AppServer.ExistDBKeyValue(SourceName,rmPrimary,'726270,10',ID) then
      begin
        dcit_SL.Clear;
        dcit_SL.Values['ic']         := LByID(ID);
        dcit_SL.Values['u']          := RByID(ID);
        dcit_SL.Values['1012809,10'] := '740878,10';
        AppServer.InsertDBRecord(SourceName,MainLang,'726270,10',True,dcit_SL);
      end;
      // Penzijní a životní pojišťovny
      if not AppServer.ExistDBKeyValue(SourceName,rmPrimary,'3367888,10',ID) then
      begin
        dcit_SL.Clear;
        dcit_SL.Values['ic'] := LByID(ID);
        dcit_SL.Values['u']  := RByID(ID);
        dcit_SL.Values['3938157,10100'] := Aktivna;
        dcit_SL.Values['4061385,10100'] := Typ;     // 1-Životní pojišťovna,2-DSS (2.pil.),3-DDS (3.pil.)
        dcit_SL.Values['4061380,10100'] := Kod;
        // zapis do DT 
        AppServer.InsertDBRecord(SourceName,MainLang,'3367888,10',True,dcit_SL);
      end else
      begin
        dcit_SL.Clear;
        dcit_SL.Values['3938157,10100'] := Aktivna;
        dcit_SL.Values['4061385,10100'] := Typ;     // 1-Životní pojišťovna,2-DSS (2.pil.),3-DDS (3.pil.)
        dcit_SL.Values['4061380,10100'] := Kod;
        // zapis do DT 
        AppServer.UpdateDBRecord(SourceName,MainLang,'3367888,10',ID,dcit_SL);
      end;
    except
      raise;
    end;
  end;
  
  
  //01 DCIZ procedure - stop


begin
  AppServer.SetDSTransferData(SourceName,'6269,5',nttNonLicAndNonNLP,lttAll,[mtaInsert,mtaUpdate,mtaDelete],[mtaInsert]);
  AppServer.SetDSTransferData(SourceName,'6269,5',nttNonLicAndNLP,lttNonLangOrNonNLP,[mtaInsert,mtaUpdate,mtaDelete],[]);
  AppServer.SetDSTransferData(SourceName,'6269,5',nttLicAndNonNLP,lttLangOnly,[mtaInsert,mtaUpdate,mtaDelete],[]);
  AppServer.SetDSTransferData(SourceName,'6269,5',nttLicAndNLP,lttNonNLPOnly,[mtaInsert,mtaUpdate,mtaDelete],[]);
  AppServer.SetDSTransferData(SourceName,'6269,5',nttNLPOnly,lttNLPOnly,[mtaIUpdate],[]);
  AppServer.SetDSTransferData(SourceName,'9999,9999',nttNonLicAndNonNLP,lttAll,[mtaInsert,mtaUpdate,mtaDelete],[mtaInsert]);
  AppServer.SetDSTransferData(SourceName,'9999,9999',nttNonLicAndNLP,lttNonLangOrNonNLP,[mtaInsert,mtaUpdate,mtaDelete],[]);
  AppServer.SetDSTransferData(SourceName,'9999,9999',nttLicAndNonNLP,lttLangOnly,[mtaInsert,mtaUpdate,mtaDelete],[]);
  AppServer.SetDSTransferData(SourceName,'9999,9999',nttLicAndNLP,lttNonNLPOnly,[mtaInsert,mtaUpdate,mtaDelete],[]);
  AppServer.SetDSTransferData(SourceName,'9999,9999',nttNLPOnly,lttNLPOnly,[mtaIUpdate],[]);
  AppServer.SetDSTransferData(SourceName,'165587,10',nttNonLicAndNonNLP,lttAll,[mtaInsert,mtaUpdate,mtaDelete],[mtaInsert]);
  AppServer.SetDSTransferData(SourceName,'165587,10',nttNonLicAndNLP,lttNonLangOrNonNLP,[mtaInsert,mtaUpdate,mtaDelete],[]);
  AppServer.SetDSTransferData(SourceName,'165587,10',nttLicAndNonNLP,lttLangOnly,[mtaInsert,mtaUpdate,mtaDelete],[]);
  AppServer.SetDSTransferData(SourceName,'165587,10',nttLicAndNLP,lttNonNLPOnly,[mtaInsert,mtaUpdate,mtaDelete],[]);
  AppServer.SetDSTransferData(SourceName,'165587,10',nttNLPOnly,lttNLPOnly,[mtaIUpdate],[]);
  M17059359_10;  // NEMAZAT, STANDARDNI SOUCAST REINSTALACE
  
  //01 DCIT - start - nespouštět
 if Legislation = '740878,10' then
  begin
  try
    // Aktualizacia Ciselnika Poistovni DDS a DSS
    dcit_SL := TStringList.Create;
    try
      { 2-DSS (2.pil.),3-DDS (3.pil.) }
      // DDS
      OpravaDDSPoistovne('6146,11','1','DDS1','3','UNIQA d.d.s., a.s.','(do 14.1.2021 AXA d.d.s., a.s.)','','35977540');
      OpravaDDSPoistovne('6143,11','1','DDS2','3','NN Tatry - Sympatia, d.d.s., a.s.','','www.nn.sk','35976853');            
      OpravaDDSPoistovne('6145,11','1','DDS3','3','STABILITA, d.d.s., a.s.','','www.stabilita.sk','36718556');
      OpravaDDSPoistovne('6144,11','1','DDS4','3','Doplnková dôchodková spoločnosť Tatra banky, a.s.','','www.ddstatrabanky.sk','36291111');
      // DSS
      OpravaDDSPoistovne('6147,11','1','DSS1','2','Allianz - Slovenská dôchodková správcovská spoločnosť, a. s.','','','35901624');
      OpravaDDSPoistovne('6148,11','1','DSS2','2','NN dôchodková správcovská spoločnosť, a.s.','','www.nn.sk','35902981');
      OpravaDDSPoistovne('6149,11','0','DSS3','2','Prvá dôchodková sporiteľňa, d.s.s., a.s.','','','');
      OpravaDDSPoistovne('6150,11','1','DSS4','2','VÚB Generali d.s.s., a.s.','','','35903058');
      OpravaDDSPoistovne('6151,11','0','DSS5','2','AEGON, d.s.s., a.s.','','','35902612');
      OpravaDDSPoistovne('6152,11','0','DSS6','2','ČSOB d.s.s., a.s.','','','');
      OpravaDDSPoistovne('6153,11','1','DSS7','2','UNIQA d.s.s., a.s.','(do 14.1.2021 AXA d.s.s., a.s.)','','35903821');
      OpravaDDSPoistovne('6156,11','1','DSS8','2','365.life, d. s. s., a. s.','','','35904305');
    finally
      dcit_SL.Free;
    end;
    // Konverzia poisteni dochodkovych z osobnych udajov na mzdove udaje
    dcit_DDS1 := TAppDataSet.Create;
    dcit_DDS2 := TAppDataSet.Create;
    dcit_MPar := TAppDataSet.Create;
    dcit_Prot := TStringList.Create;
    dcit_SL   := TStringList.Create;
    try
      dcit_Obd := AppServer.GetDBKeyValues(SourceName,rmPrimary,'450391,10','("450397,10"=0) AND ("451082,10"=0)');
      if dcit_Obd <> '' then
      begin
        dcit_Prot.Add('Boli skonvertované poistenia DDS zamestnancov do týchto PPV :');
        dcit_Prot.Add(' ');
        dcit_Dat := ANSIStrToDate(AppServer.GetDBAtrValue(SourceName,rmPrimary,'','450391,10','546181,10',dcit_obd));
        // PPV - parametry - info pro více PPV (SK)
        dcit_MPar.SetDSParams(SourceName,rmPrimary,'625235,10100',dsaFullNonVisible,'450459,10',dcit_Obd,'ID_B=ID','','"1862710,10100" ASC');
        dcit_MPar.NoMacros := True;
        dcit_MPar.OpenEmpty;
        // PPV - parametry - doplnkové důchodové spoření (SK)
        dcit_DDS2.SetDSParams(SourceName,rmPrimary,'3937975,10100',dsaFullNonVisible,'450459,10',dcit_Obd,'3937988,10100.ID_B=ID','','');
        dcit_DDS2.NoMacros := True;
        dcit_DDS2.Open;
        // Doplnkové důchodové spoření osoby (SK)
        dcit_DDS1.SetDSParams(SourceName,rmPrimary,'55641,10100',dsaFullNonVisible,'452437,10',dcit_Obd,'3373373,10100.ID_B=ID','','"4086937,10100" ASC');
        dcit_DDS1.NoMacros := True;
        dcit_DDS1.Open;
        // Konverzia
        dcit_DDS1.First;
        while not dcit_DDS1.EOF do
        begin
          dcit_Oso := dcit_DDS1.GetKeyValue('3373373,10100',ftIDA);
          dcit_PPV := '';
          dcit_Par := '';
          dcit_Kon := False;
          // kontrola ci sa ma konvertovat
          if (dcit_DDS1.FieldByName('55645,10100').AsFloat > 0) or 
             (dcit_DDS1.FieldByName('55646,10100').AsFloat > 0) or 
             (dcit_DDS1.FieldByName('953148,10100').AsFloat > 0) or 
             (dcit_DDS1.FieldByName('953147,10100').AsFloat > 0) then
          begin
            // Platnost do > Datum zaciatku obdobia
            if (dcit_DDS1.FieldByName('55647,10100').IsNull) or
               (dcit_DDS1.FieldByName('55647,10100').AsDateTime >= dcit_Dat) then dcit_Kon := True;
            // ID Parametrov PPV
            if dcit_Kon then
            begin
              dcit_MPar.Filter := Format('("1862712,10100.ic"=%%) AND ("1862712,10100.u"=%%)',[LByID(dcit_Oso),RByID(dcit_Oso)]);
              dcit_MPar.First;
              dcit_PPV := dcit_MPar.FieldByName('625247,10100').AsString;
              dcit_Par := dcit_MPar.GetPKValue;
              while not dcit_MPar.EOF do
              begin // nastavi mzdove parametre na prve v poradi alebo urcene udajom :Pocitat dochodkove poistenie
                if dcit_MPar.FieldByName('3787615,10100').AsInteger = 1 then dcit_Par := dcit_MPar.GetPKValue;
                dcit_MPar.Next;
              end;
            end;
            //
          end;
          // Zapise do protokolu dalsieho zamestnanca
          if dcit_SL.IndexOf(dcit_Oso) = -1 then
          begin
            dcit_SL.Add(dcit_Oso);
            dcit_Meno := AppServer.GetDBAtrValue(SourceName,rmPrimary,'','150,0','454282,10',dcit_Oso) + ' - ' +
                       AppServer.GetDBAtrValue(SourceName,rmPrimary,'','130,0','18734,10',dcit_Oso) + ' : ';
            dcit_Prot.Add(' ');
            dcit_Prot.Add(dcit_Meno);
          end;
          try
            // zapis do mzdovych udajov
            if dcit_Kon and (dcit_Par <> '') then
            begin
              dcit_Poi := dcit_DDS1.GetKeyValue('',ftIDA);
              dcit_DDS2.Append;
              // Vytvori vazbu na mzdove parametre
              dcit_DDS2.FieldByName('ic_a').AsString := LByID(dcit_Par);
              dcit_DDS2.FieldByName('u_a').AsString  := RByID(dcit_Par);
              dcit_DDS2.FieldByName('ic_b').AsString := LByID(dcit_Poi);
              dcit_DDS2.FieldByName('u_b').AsString  := RByID(dcit_Poi);
              // Udaje o poisteni
              dcit_DDS2.FieldByName('3938074,10100').AsString := dcit_DDS1.FieldByName('55645,10100').AsString;   // Procento odvodu zam.
              dcit_DDS2.FieldByName('3938075,10100').AsString := dcit_DDS1.FieldByName('953148,10100').AsString;  // Procento příspěvku org.
              dcit_DDS2.FieldByName('3938065,10100').AsString := dcit_DDS1.FieldByName('55646,10100').AsString;   // Částka odvodu zam.
              dcit_DDS2.FieldByName('3938066,10100').AsString := dcit_DDS1.FieldByName('953147,10100').AsString;  // Částka příspěvku org.
              dcit_DDS2.FieldByName('3937980,10100').AsString := dcit_DDS1.FieldByName('62637,10100').AsString;   // Číslo smlouvy
              dcit_DDS2.FieldByName('4067912,10100').AsString := '3';                                             // Druh pojištění
              dcit_DDS2.FieldByName('3938067,10100').AsString := dcit_DDS1.FieldByName('433067,10100').AsString;  // Kategorie práce
              dcit_DDS2.FieldByName('3938073,10100').AsString := dcit_DDS1.FieldByName('187380,10100').AsString;  // Pozastavení pro období
              dcit_DDS2.FieldByName('3938068,10100').AsString := dcit_DDS1.FieldByName('2181500,10100').AsString; // Odvod příspěvku org.
              dcit_DDS2.FieldByName('3938069,10100').AsString := dcit_DDS1.FieldByName('2181499,10100').AsString; // Odvod příspěvku zam.
              dcit_DDS2.FieldByName('3938070,10100').AsString := dcit_DDS1.FieldByName('55647,10100').AsString;   // Platnost do
              dcit_DDS2.FieldByName('3938071,10100').AsString := dcit_DDS1.FieldByName('55648,10100').AsString;   // Platnost od
              dcit_DDS2.FieldByName('3938072,10100').AsString := dcit_DDS1.FieldByName('3372127,10100').AsString; // Povinný příspěvek
              if (dcit_DDS1.FieldByName('55649,10100').AsInteger = 1) then
                dcit_DDS2.FieldByName('3938076,10100').AsString := '1';                                           // Příspěvek organizace
              if (dcit_DDS2.FieldByName('3938074,10100').AsFloat > 0) or (dcit_DDS2.FieldByName('3938065,10100').AsFloat > 0) then
                dcit_DDS2.FieldByName('4062489,10100').AsString := '1';                                           // Příspěvek zaměstnance
              dcit_DDS2.FieldByName('3938077,10100').AsString := dcit_DDS1.FieldByName('2181501,10100').AsString; // Typ příspěvku
              dcit_DDS2.FieldByName('3938081,10100').AsString := dcit_DDS1.FieldByName('3787545,10100').AsString; // VZ pro odvod DDS
              dcit_DDS2.FieldByName('3938078,10100').AsString := dcit_DDS1.FieldByName('3783471,10100').AsString; // Základ pro výpočet
              dcit_DDS2.FieldByName('3938080,10100').AsString := dcit_DDS1.FieldByName('55650,10100').AsString;   // Způsob výpočtu zam.
              dcit_DDS2.FieldByName('3938079,10100').AsString := dcit_DDS1.FieldByName('953149,10100').AsString;  // Způsob příspěvku organizace
              // Bankovy ucet pre platbu
              if dcit_DDS1.FieldByName('909119,10100.ic').AsString <> '' then
              begin // IBAN individualnej platby
                dcit_DDS2.FieldByName('3937999,10100.ic').AsString := dcit_DDS1.FieldByName('909119,10100.ic').AsString;
                dcit_DDS2.FieldByName('3937999,10100.u').AsString  := dcit_DDS1.FieldByName('909119,10100.u').AsString;
                dcit_DDS2.FieldByName('3938088,10100').AsString    := dcit_DDS1.FieldByName('909122,10100').AsString; 
                //dcit_DDS2.FieldByName('').AsString := dcit_DDS1.FieldByName('3371292,10100').AsString; // Specifický symbol
              end;
              dcit_DDS2.Post;
              //dcit_DDS2.Cancel;
              if dcit_DDS2.FieldByName('4062400,10100').AsInteger = 1 then
                dcit_PPV := dcit_PPV + ' - Počítať DDS (Ano)'
              else
                dcit_PPV := dcit_PPV + ' - Počítať DDS (NIE)!';
            end else
              dcit_PPV := 'DDS sa nepreviedla na PPV';
            // ukoncit poistenie stare
            dcit_DDS1.Edit;
            if (dcit_DDS1.FieldByName('55647,10100').IsNull) or 
               (dcit_DDS1.FieldByName('55647,10100').AsDateTime >= dcit_Dat) then
            begin
              if dcit_DDS1.FieldByName('55648,10100').AsDateTime >= DateAdd(dpDay,-1,dcit_Dat) then
                dcit_DDS1.FieldByName('55647,10100').AsDateTime := dcit_DDS1.FieldByName('55648,10100').AsDateTime
              else
                dcit_DDS1.FieldByName('55647,10100').AsDateTime := DateAdd(dpDay,-1,dcit_Dat);
            end;
            dcit_DDS1.FieldByName('2181500,10100').AsString := '';
            dcit_DDS1.FieldByName('2181499,10100').AsString := '';
            dcit_DDS1.FieldByName('3787545,10100').AsString := '';
            dcit_DDS1.FieldByName('2181501,10100').AsString := '';
            dcit_DDS1.Post;
            // Zapise do protokolu info o konverzii DDS
            dcit_Prot.Add('  - '+dcit_DDS1.FieldByName('55651,10100').AsString+' ('+
                          dcit_DDS1.FieldByName('55648,10100').AsANSIString+' - '+
                          dcit_DDS1.FieldByName('55647,10100').AsANSIString+') - > '+ dcit_PPV);
          except
            dcit_DDS1.Cancel;
            dcit_DDS2.Cancel;
            raise;
          end;
          dcit_DDS1.Next;
        end;
        // Zapis do protokolu
        dcit_Protokol(dcit_Obd,'Konverzia poistenia DDS zamestnancov',dcit_Prot.Text);
      end;
    finally
      dcit_DDS1.Free;
      dcit_DDS2.Free;
      dcit_MPar.Free;
      dcit_Prot.Free;
      dcit_SL.Free;
    end;
  except
    raise;
  end;
  end;
  
  //01 DCIZ - stop
  
  // TB - begin (NESPOUSTET)
  // Reinstall - přepočet - nahrazeného množství - komplet
  M2409602_9;
  // TB - end
end.